home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
SGI Freeware 2002 November
/
SGI Freeware 2002 November - Disc 2.iso
/
dist
/
fw_libpcap.idb
/
usr
/
freeware
/
catman
/
p_man
/
cat3
/
pcap.Z
/
pcap
Wrap
Text File
|
2002-04-08
|
28KB
|
531 lines
PCAP(3) PCAP(3)
NNAAMMEE
pcap - Packet Capture library
SSYYNNOOPPSSIISS
##iinncclluuddee <<ppccaapp..hh>>
cchhaarr eerrrrbbuuff[[PPCCAAPP__EERRRRBBUUFF__SSIIZZEE]];;
ppccaapp__tt **ppccaapp__ooppeenn__lliivvee((cchhaarr **ddeevviiccee,, iinntt ssnnaapplleenn,,
iinntt pprroommiisscc,, iinntt ttoo__mmss,, cchhaarr **eerrrrbbuuff))
ppccaapp__tt **ppccaapp__ooppeenn__ddeeaadd((iinntt lliinnkkttyyppee,, iinntt ssnnaapplleenn))
ppccaapp__tt **ppccaapp__ooppeenn__oofffflliinnee((cchhaarr **ffnnaammee,, cchhaarr **eerrrrbbuuff))
ppccaapp__dduummppeerr__tt **ppccaapp__dduummpp__ooppeenn((ppccaapp__tt **pp,, cchhaarr **ffnnaammee))
iinntt ppccaapp__sseettnnoonnbblloocckk((ppccaapp__tt **pp,, iinntt nnoonnbblloocckk,, cchhaarr **eerrrrbbuuff));;
iinntt ppccaapp__ggeettnnoonnbblloocckk((ppccaapp__tt **pp,, cchhaarr **eerrrrbbuuff));;
iinntt ppccaapp__ffiinnddaallllddeevvss((ppccaapp__iiff__tt ****aallllddeevvsspp,, cchhaarr **eerrrrbbuuff))
vvooiidd ppccaapp__ffrreeeeaallllddeevvss((ppccaapp__iiff__tt **))
cchhaarr **ppccaapp__llooookkuuppddeevv((cchhaarr **eerrrrbbuuff))
iinntt ppccaapp__llooookkuuppnneett((cchhaarr **ddeevviiccee,, bbppff__uu__iinntt3322 **nneettpp,,
bbppff__uu__iinntt3322 **mmaasskkpp,, cchhaarr **eerrrrbbuuff))
iinntt ppccaapp__ddiissppaattcchh((ppccaapp__tt **pp,, iinntt ccnntt,,
ppccaapp__hhaannddlleerr ccaallllbbaacckk,, uu__cchhaarr **uusseerr))
iinntt ppccaapp__lloooopp((ppccaapp__tt **pp,, iinntt ccnntt,,
ppccaapp__hhaannddlleerr ccaallllbbaacckk,, uu__cchhaarr **uusseerr))
vvooiidd ppccaapp__dduummpp((uu__cchhaarr **uusseerr,, ssttrruucctt ppccaapp__ppkktthhddrr **hh,,
uu__cchhaarr **sspp))
iinntt ppccaapp__ccoommppiillee((ppccaapp__tt **pp,, ssttrruucctt bbppff__pprrooggrraamm **ffpp,,
cchhaarr **ssttrr,, iinntt ooppttiimmiizzee,, bbppff__uu__iinntt3322 nneettmmaasskk))
iinntt ppccaapp__sseettffiilltteerr((ppccaapp__tt **pp,, ssttrruucctt bbppff__pprrooggrraamm **ffpp))
vvooiidd ppccaapp__ffrreeeeccooddee((ssttrruucctt bbppff__pprrooggrraamm **));;
uu__cchhaarr **ppccaapp__nneexxtt((ppccaapp__tt **pp,, ssttrruucctt ppccaapp__ppkktthhddrr **hh))
iinntt ppccaapp__ddaattaalliinnkk((ppccaapp__tt **pp))
iinntt ppccaapp__ssnnaappsshhoott((ppccaapp__tt **pp))
iinntt ppccaapp__iiss__sswwaappppeedd((ppccaapp__tt **pp))
iinntt ppccaapp__mmaajjoorr__vveerrssiioonn((ppccaapp__tt **pp))
iinntt ppccaapp__mmiinnoorr__vveerrssiioonn((ppccaapp__tt **pp))
iinntt ppccaapp__ssttaattss((ppccaapp__tt **pp,, ssttrruucctt ppccaapp__ssttaatt **ppss))
FFIILLEE **ppccaapp__ffiillee((ppccaapp__tt **pp))
iinntt ppccaapp__ffiilleennoo((ppccaapp__tt **pp))
vvooiidd ppccaapp__ppeerrrroorr((ppccaapp__tt **pp,, cchhaarr **pprreeffiixx))
cchhaarr **ppccaapp__ggeetteerrrr((ppccaapp__tt **pp))
cchhaarr **ppccaapp__ssttrreerrrroorr((iinntt eerrrroorr))
vvooiidd ppccaapp__cclloossee((ppccaapp__tt **pp))
vvooiidd ppccaapp__dduummpp__cclloossee((ppccaapp__dduummppeerr__tt **pp))
DDEESSCCRRIIPPTTIIOONN
The Packet Capture library provides a high level interface
to packet capture systems. All packets on the network,
even those destined for other hosts, are accessible
through this mechanism.
RROOUUTTIINNEESS
NOTE: _e_r_r_b_u_f in ppccaapp__ooppeenn__lliivvee(()), ppccaapp__ooppeenn__ddeeaadd(()),
ppccaapp__ooppeenn__oofffflliinnee(()), ppccaapp__sseettnnoonnbblloocckk(()),
ppccaapp__ggeettnnoonnbblloocckk(()), ppccaapp__ffiinnddaallllddeevvss(()), ppccaapp__llooookkuuppddeevv(()),
and ppccaapp__llooookkuuppnneett(()) is assumed to be able to hold at
least PPCCAAPP__EERRRRBBUUFF__SSIIZZEE chars.
ppccaapp__ooppeenn__lliivvee(()) is used to obtain a packet capture
descriptor to look at packets on the network. _d_e_v_i_c_e is a
string that specifies the network device to open; on Linux
systems with 2.2 or later kernels, a _d_e_v_i_c_e argument of
"any" or NNUULLLL can be used to capture packets from all
interfaces. _s_n_a_p_l_e_n specifies the maximum number of bytes
to capture. _p_r_o_m_i_s_c specifies if the interface is to be
put into promiscuous mode. (Note that even if this param
eter is false, the interface could well be in promiscuous
mode for some other reason.) For now, this doesn't work
on the "any" device; if an argument of "any" or NULL is
supplied, the _p_r_o_m_i_s_c flag is ignored. _t_o___m_s specifies
the read timeout in milliseconds. The read timeout is
used to arrange that the read not necessarily return imme
diately when a packet is seen, but that it wait for some
amount of time to allow more packets to arrive and to read
multiple packets from the OS kernel in one operation. Not
all platforms support a read timeout; on platforms that
don't, the read timeout is ignored. _e_r_r_b_u_f is used to
return error or warning text. It will be set to error
text when ppccaapp__ooppeenn__lliivvee(()) fails and returns NNUULLLL. _e_r_r_b_u_f
may also be set to warning text when ppccaapp__ooppeenn__lliivvee(()) suc
ceds; to detect this case the caller should store a zero-
length string in _e_r_r_b_u_f before calling ppccaapp__ooppeenn__lliivvee(())
and display the warning to the user if _e_r_r_b_u_f is no longer
a zero-length string.
ppccaapp__ooppeenn__ddeeaadd(()) is used for creating a ppccaapp__tt structure
to use when calling the other functions in libpcap. It is
typically used when just using libpcap for compiling BPF
code.
ppccaapp__ooppeenn__oofffflliinnee(()) is called to open a ``savefile'' for
reading. _f_n_a_m_e specifies the name of the file to open.
The file has the same format as those used by ttccppdduummpp((11))
and ttccppsslliiccee((11)). The name "-" in a synonym for ssttddiinn.
_e_r_r_b_u_f is used to return error text and is only set when
ppccaapp__ooppeenn__oofffflliinnee(()) fails and returns NNUULLLL.
ppccaapp__dduummpp__ooppeenn(()) is called to open a ``savefile'' for
writing. The name "-" in a synonym for ssttddoouutt. NNUULLLL is
returned on failure. _p is a _p_c_a_p struct as returned by
ppccaapp__ooppeenn__oofffflliinnee(()) or ppccaapp__ooppeenn__lliivvee(()). _f_n_a_m_e specifies
the name of the file to open. If NNUULLLL is returned,
ppccaapp__ggeetteerrrr(()) can be used to get the error text.
ppccaapp__sseettnnoonnbblloocckk(()) puts a capture descriptor, opened with
ppccaapp__ooppeenn__lliivvee(()), into ``non-blocking'' mode, or takes it
out of ``non-blocking'' mode, depending on whether the
_n_o_n_b_l_o_c_k argument is non-zero or zero. It has no effect
on ``savefiles''. If there is an error, -1 is returned
and _e_r_r_b_u_f is filled in with an appropriate error message;
otherwise, 0 is returned. In ``non-blocking'' mode, an
attempt to read from the capture descriptor with ppccaapp__ddiiss
ppaattcchh(()) will, if no packets are currently available to be
read, return 0 immediately rather than blocking waiting
for packets to arrive. ppccaapp__lloooopp(()) and ppccaapp__nneexxtt(()) will
not work in ``non-blocking'' mode.
ppccaapp__ggeettnnoonnbblloocckk(()) returns the current ``non-blocking''
state of the capture descriptor; it always returns 0 on
``savefiles''. If there is an error, -1 is returned and
_e_r_r_b_u_f is filled in with an appropriate error message.
ppccaapp__ffiinnddaallllddeevvss(()) constructs a list of network devices
that can be opened with ppccaapp__ooppeenn__lliivvee(()). (Note that
there may be network devices that cannot be opened with
ppccaapp__ooppeenn__lliivvee(()) by the process calling ppccaapp__ffiinndd
aallllddeevvss(()), because, for example, that process might not
have sufficient privileges to open them for capturing; if
so, those devices will not appear on the list.) _a_l_l_d_e_v_s_p
is set to point to the first element of the list; each
element of the list is of type ppccaapp__iiff__tt, and has the fol
lowing members:
nneexxtt if not NNUULLLL, a pointer to the next element
in the list; NNUULLLL for the last element of
the list
nnaammee a pointer to a string giving a name for the
device to pass to ppccaapp__ooppeenn__lliivvee(())
ddeessccrriippttiioonn
if not NNUULLLL, a pointer to a string giving a
human-readable description of the device
aaddddrreesssseess
a pointer to the first element of a list of
addresses for the interface
ffllaaggss interface flags:
PPCCAAPP__IIFF__LLOOOOPPBBAACCKK
set if the interface is a loopback
interface
Each element of the list of addresses is of type
ppccaapp__aaddddrr__tt, and has the following members:
nneexxtt if not NNUULLLL, a pointer to the next element
in the list; NNUULLLL for the last element of
the list
aaddddrr a pointer to a ssttrruucctt ssoocckkaaddddrr containing an
address
nneettmmaasskk
if not NNUULLLL, a pointer to a ssttrruucctt ssoocckkaaddddrr
that contains the netmask corresponding to
the address pointed to by aaddddrr
bbrrooaaddaaddddrr
if not NNUULLLL, a pointer to a ssttrruucctt ssoocckkaaddddrr
that contains the broadcast address corre
sponding to the address pointed to by aaddddrr;
may be null if the interface doesn't support
broadcasts
ddssttaaddddrr
if not NNUULLLL, a pointer to a ssttrruucctt ssoocckkaaddddrr
that contains the destination address corre
sponding to the address pointed to by aaddddrr;
may be null if the interface isn't a point-
to-point interface
ppccaapp__ffrreeeeaallllddeevvss(()) is used to free a list allocated by
ppccaapp__ffiinnddaallllddeevvss(()).
ppccaapp__llooookkuuppddeevv(()) returns a pointer to a network device
suitable for use with ppccaapp__ooppeenn__lliivvee(()) and ppccaapp__llooookkuupp
nneett(()). If there is an error, NNUULLLL is returned and _e_r_r_b_u_f
is filled in with an appropriate error message.
ppccaapp__llooookkuuppnneett(()) is used to determine the network number
and mask associated with the network device ddeevviiccee. Both
_n_e_t_p and _m_a_s_k_p are _b_p_f___u___i_n_t_3_2 pointers. A return of -1
indicates an error in which case _e_r_r_b_u_f is filled in with
an appropriate error message.
ppccaapp__ddiissppaattcchh(()) is used to collect and process packets.
_c_n_t specifies the maximum number of packets to process
before returning. This is not a minimum number; when
reading a live capture, only one bufferful of packets is
read at a time, so fewer than _c_n_t packets may be pro
cessed. A _c_n_t of -1 processes all the packets received in
one buffer when reading a live capture, or all the packets
in the file when reading a ``savefile''. _c_a_l_l_b_a_c_k speci
fies a routine to be called with three arguments: a _u___c_h_a_r
pointer which is passed in from ppccaapp__ddiissppaattcchh(()), a pointer
to the _p_c_a_p___p_k_t_h_d_r struct (which precede the actual net
work headers and data), and a _u___c_h_a_r pointer to the packet
data.
The number of packets read is returned. 0 is returned if
no packets were read from a live capture (if, for example,
they were discarded because they didn't pass the packet
filter, or if, on platforms that support a read timeout
that starts before any packets arrive, the timeout expires
before any packets arrive, or if the file descriptor for
the capture device is in non-blocking mode and no packets
were available to be read) or if no more packets are
available in a ``savefile.'' A return of -1 indicates an
error in which case ppccaapp__ppeerrrroorr(()) or ppccaapp__ggeetteerrrr(()) may be
used to display the error text.
NNOOTTEE: when reading a live capture, ppccaapp__ddiissppaattcchh(()) will
not necessarily return when the read times out; on some
platforms, the read timeout isn't supported, and, on other
platforms, the timer doesn't start until at least one
packet arrives. This means that the read timeout should
NNOOTT be used in, for example, an interactive application,
to allow the packet capture loop to ``poll'' for user
input periodically, as there's no guarantee that ppccaapp__ddiiss
ppaattcchh(()) will return after the timeout expires.
ppccaapp__lloooopp(()) is similar to ppccaapp__ddiissppaattcchh(()) except it keeps
reading packets until _c_n_t packets are processed or an
error occurs. It does nnoott return when live read timeouts
occur. Rather, specifying a non-zero read timeout to
ppccaapp__ooppeenn__lliivvee(()) and then calling ppccaapp__ddiissppaattcchh(()) allows
the reception and processing of any packets that arrive
when the timeout occurs. A negative _c_n_t causes
ppccaapp__lloooopp(()) to loop forever (or at least until an error
occurs).
ppccaapp__nneexxtt(()) reads the next packet (by calling ppccaapp__ddiiss
ppaattcchh(()) with a _c_n_t of 1) and returns a _u___c_h_a_r pointer to
the data in that packet. (The _p_c_a_p___p_k_t_h_d_r struct for that
packet is not supplied.)
ppccaapp__dduummpp(()) outputs a packet to the ``savefile'' opened
with ppccaapp__dduummpp__ooppeenn(()). Note that its calling arguments
are suitable for use with ppccaapp__ddiissppaattcchh(()) or ppccaapp__lloooopp(()).
If called directly, the _u_s_e_r parameter is of type
_p_c_a_p___d_u_m_p_e_r___t as returned by ppccaapp__dduummpp__ooppeenn(()).
ppccaapp__ccoommppiillee(()) is used to compile the string _s_t_r into a
filter program. _p_r_o_g_r_a_m is a pointer to a _b_p_f___p_r_o_g_r_a_m
struct and is filled in by ppccaapp__ccoommppiillee(()). _o_p_t_i_m_i_z_e con
trols whether optimization on the resulting code is per
formed. _n_e_t_m_a_s_k specifies the netmask of the local net.
A return of -1 indicates an error in which case
ppccaapp__ggeetteerrrr(()) may be used to display the error text.
ppccaapp__ccoommppiillee__nnooppccaapp(()) is similar to ppccaapp__ccoommppiillee(()) except
that instead of passing a pcap structure, one passes the
snaplen and linktype explicitly. It is intended to be
used for compiling filters for direct BPF usage, without
necessarily having called ppccaapp__ooppeenn(()). A return of -1
indicates an error; the error text is unavailable.
(ppccaapp__ccoommppiillee__nnooppccaapp(()) is a wrapper around
ppccaapp__ooppeenn__ddeeaadd(()), ppccaapp__ccoommppiillee(()), and ppccaapp__cclloossee(()); the
latter three routines can be used directly in order to get
the error text for a compilation error.)
ppccaapp__sseettffiilltteerr(()) is used to specify a filter program. _f_p
is a pointer to a _b_p_f___p_r_o_g_r_a_m struct, usually the result
of a call to ppccaapp__ccoommppiillee(()). --11 is returned on failure,
in which case ppccaapp__ggeetteerrrr(()) may be used to display the
error text; 00 is returned on success.
ppccaapp__ffrreeeeccooddee(()) is used to free up allocated memory
pointed to by a _b_p_f___p_r_o_g_r_a_m struct generated by ppccaapp__ccoomm
ppiillee(()) when that BPF program is no longer needed, for
example after it has been made the filter program for a
pcap structure by a call to ppccaapp__sseettffiilltteerr(()).
ppccaapp__ddaattaalliinnkk(()) returns the link layer type; link layer
types it can return include:
DDLLTT__NNUULLLL
BSD loopback encapsulation; the link layer
header is a 4-byte field, in _h_o_s_t byte order,
containing a PF_ value from ssoocckkeett..hh for the
network-layer protocol of the packet
Note that ``host byte order'' is the byte order
of the machine on which the packets are cap
tured, and the PF_ values are for the OS of the
machine on which the packets are captured; if a
live capture is being done, ``host byte order''
is the byte order of the machine capturing the
packets, and the PF_ values are those of the OS
of the machine capturing the packets, but if a
``savefile'' is being read, the byte order and
PF_ values are _n_o_t necessarily those of the
machine reading the capture file.
DDLLTT__EENN1100MMBB
Ethernet (10Mb, 100Mb, 1000Mb, and up)
DDLLTT__IIEEEEEE880022
IEEE 802.5 Token Ring
DDLLTT__AARRCCNNEETT
ARCNET
DDLLTT__SSLLIIPP
SLIP; the link layer header contains, in order:
a 1-byte flag, which is 0 for packets
received by the machine and 1 for packets
sent by the machine;
a 1-byte field, the upper 4 bits of which
indicate the type of packet, as per RFC
1144:
0x40 an unmodified IP datagram
(TYPE_IP);
0x70 an uncompressed-TCP IP datagram
(UNCOMPRESSED_TCP), with that
byte being the first byte of the
raw IP header on the wire, con
taining the connection number in
the protocol field;
0x80 a compressed-TCP IP datagram
(COMPRESSED_TCP), with that byte
being the first byte of the com
pressed TCP/IP datagram header;
for UNCOMPRESSED_TCP, the rest of the modi
fied IP header, and for COMPRESSED_TCP, the
compressed TCP/IP datagram header;
for a total of 16 bytes; the uncompressed IP
datagram follows the header
DDLLTT__PPPPPP
PPP; if the first 2 bytes are 0xff and 0x03,
it's PPP in HDLC-like framing, with the PPP
header following those two bytes, otherwise it's
PPP without framing, and the packet begins with
the PPP header
DDLLTT__FFDDDDII
FDDI
DDLLTT__AATTMM__RRFFCC11448833
RFC 1483 LLC/SNAP-encapsulated ATM; the packet
begins with an IEEE 802.2 LLC header
DDLLTT__RRAAWW
raw IP; the packet begins with an IP header
DDLLTT__PPPPPP__SSEERRIIAALL
PPP in HDLC-like framing, as per RFC 1662, or
Cisco PPP with HDLC framing, as per section
4.3.1 of RFC 1547; the first byte will be 0xFF
for PPP in HDLC-like framing, and will be 0x0F
or 0x8F for Cisco PPP with HDLC framing
DDLLTT__PPPPPP__EETTHHEERR
PPPoE; the packet begins with a PPPoE header, as
per RFC 2516
DDLLTT__CC__HHDDLLCC
Cisco PPP with HDLC framing, as per section
4.3.1 of RFC 1547
DDLLTT__IIEEEEEE880022__1111
IEEE 802.11 wireless LAN
DDLLTT__LLOOOOPP
OpenBSD loopback encapsulation; the link layer
header is a 4-byte field, in _n_e_t_w_o_r_k byte order,
containing a PF_ value from OpenBSD's ssoocckkeett..hh
for the network-layer protocol of the packet
Note that, if a ``savefile'' is being read,
those PF_ values are _n_o_t necessarily those of
the machine reading the capture file.
DDLLTT__LLIINNUUXX__SSLLLL
Linux "cooked" capture encapsulation; the link
layer header contains, in order:
a 2-byte "packet type", in network byte
order, which is one of:
0 packet was sent to us by somebody
else
1 packet was broadcast by somebody
else
2 packet was multicast, but not
broadcast, by somebody else
3 packet was sent by somebody else
to somebody else
4 packet was sent by us
a 2-byte field, in network byte order, con
taining a Linux ARPHRD_ value for the link
layer device type;
a 2-byte field, in network byte order, con
taining the length of the link layer
address of the sender of the packet (which
could be 0);
an 8-byte field containing that number of
bytes of the link layer header (if there
are more than 8 bytes, only the first 8 are
present);
a 2-byte field containing an Ethernet pro
tocol type, in network byte order, or con
taining 1 for Novell 802.3 frames without
an 802.2 LLC header or 4 for frames begin
ning with an 802.2 LLC header.
DDLLTT__LLTTAALLKK
Apple LocalTalk; the packet begins with an
AppleTalk LLAP header
ppccaapp__ssnnaappsshhoott(()) returns the snapshot length specified when
ppccaapp__ooppeenn__lliivvee was called.
ppccaapp__iiss__sswwaappppeedd(()) returns true if the current ``savefile''
uses a different byte order than the current system.
ppccaapp__mmaajjoorr__vveerrssiioonn(()) returns the major number of the ver
sion of the pcap used to write the savefile.
ppccaapp__mmiinnoorr__vveerrssiioonn(()) returns the minor number of the ver
sion of the pcap used to write the savefile.
ppccaapp__ffiillee(()) returns the standard I/O stream of the ``save
file,'' if a ``savefile'' was opened with
ppccaapp__ooppeenn__oofffflliinnee(()), or NULL, if a network device was
opened with ppccaapp__ooppeenn__lliivvee(()).
ppccaapp__ssttaattss(()) returns 0 and fills in a ppccaapp__ssttaatt struct.
The values represent packet statistics from the start of
the run to the time of the call. If there is an error or
the underlying packet capture doesn't support packet
statistics, -1 is returned and the error text can be
obtained with ppccaapp__ppeerrrroorr(()) or ppccaapp__ggeetteerrrr(()).
ppccaapp__ssttaattss(()) is supported only on live captures, not on
``savefiles''; no statistics are stored in ``savefiles'',
so no statistics are available when reading from a ``save
file''.
ppccaapp__ffiilleennoo(()) returns the file descriptor number from
which captured packets are read, if a network device was
opened with ppccaapp__ooppeenn__lliivvee(()), or -1, if a ``savefile'' was
opened with ppccaapp__ooppeenn__oofffflliinnee(()).
ppccaapp__ppeerrrroorr(()) prints the text of the last pcap library
error on ssttddeerrrr, prefixed by _p_r_e_f_i_x.
ppccaapp__ggeetteerrrr(()) returns the error text pertaining to the
last pcap library error. NNOOTTEE: the pointer it returns
will no longer point to a valid error message string after
the ppccaapp__tt passed to it is closed; you must use or copy
the string before closing the ppccaapp__tt.
ppccaapp__ssttrreerrrroorr(()) is provided in case ssttrreerrrroorr(1) isn't
available.
ppccaapp__cclloossee(()) closes the files associated with _p and deal
locates resources.
ppccaapp__dduummpp__cclloossee(()) closes the ``savefile.''
SSEEEE AALLSSOO
tcpdump(1), tcpslice(1)
AAUUTTHHOORRSS
The original authors are:
Van Jacobson, Craig Leres and Steven McCanne, all of the
Lawrence Berkeley National Laboratory, University of Cali
fornia, Berkeley, CA.
The current version is available from "The Tcpdump
Group"'s Web site at
_h_t_t_p_:_/_/_w_w_w_._t_c_p_d_u_m_p_._o_r_g_/
BBUUGGSS
Please send problems, bugs, questions, desirable enhance
ments, etc. to:
tcpdump-workers@tcpdump.org
Please send source code contributions, etc. to:
patches@tcpdump.org
3 January 2001 PCAP(3)